package io;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

/**
 * 对象流
 * 对象流是一对高级流，在流连接中的作用是进行队列的序列化与反序列化。方便我们进行对象的读写操作
 * 对象序列化： 将一个对象按照其结构转换为一组字节的过程
 * 反序列化：将一组字节还原为java对象的过程。
 * java.io.ObjectInputStream和ObjectOutputStream
 *
 */
public class OOSDemo {
    public static void main(String[] args) throws IOException {
        /*
       将一个person对象写入文件person。obj中
         */
        String name="苍老师";
        int age=18;
        String gender="女";
        String []otherInfo={"来自日本","是一名演员","肤白貌美大长腿",
                "促进中日文化交流","广大男性同胞的启蒙老师"};
        Person p=new Person(name,age,gender,otherInfo);
        System.out.println(p);

        FileOutputStream fos =new FileOutputStream("person.obj");
        ObjectOutputStream oos =new ObjectOutputStream(fos);
/**
        当前使用对象输出流将一个对象写出（进行对象序列化）时，该方法要求写出的对象
        所属的类必须要实现接口：java.Serializable,否则会抛出下面的异常
        java.io.NotSerializableException: io.Person

        写入文件后，发现文件数据Person对象保存的数据要大。这是因为序列化后的
         这组字节中还要包含当前对象的结构信息,比如类名,属性信息等等,以便将来可以
         进行反序列化.
 */
        oos.writeObject(p);
        System.out.println("搞定");
        oos.close();

    }
}
